package br.com.requisicao.compra.service.impl;

import java.util.List;

import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;

import br.com.requisicao.compra.canonico.Cidade;
import br.com.requisicao.compra.canonico.Fornecedor;
import br.com.requisicao.compra.constantes.ConstantesMensagensSucesso;
import br.com.requisicao.compra.dao.ICidadeDAO;
import br.com.requisicao.compra.dao.impl.CidadeDAO;
import br.com.requisicao.compra.exception.BeanException;
import br.com.requisicao.compra.service.ICidadeService;
import br.com.requisicao.compra.service.IFornecedorService;



public class CidadeService implements ICidadeService {

	private ICidadeDAO cidadeDAO;
	private IFornecedorService fornecedorService;

	public Cidade salvar(Cidade cidade) throws BeanException {

		this.cidadeDAO = new CidadeDAO();

		try {
			cidade = cidadeDAO.salvarOuAtualizar(cidade);
		} catch (Exception e) {
			e.printStackTrace();
		}
		return null;
	}

	public List<Cidade> obtemCidade() {

		List<Cidade> cidade = null;
		this.cidadeDAO = new CidadeDAO();

		try {
			cidade = cidadeDAO.obtemTodasCidades();
		} catch (Exception e) {
			e.printStackTrace();
		}

		return cidade;
	}

	public Boolean excluir(Cidade cidade) throws BeanException {
		
		Boolean deletou = false;

		this.cidadeDAO = new CidadeDAO();
		this.fornecedorService = new FornecedorService();
		Fornecedor fornecedor = null;

		FacesContext context = FacesContext.getCurrentInstance();

		try {

			fornecedor = this.fornecedorService.obtemFornecedorPorId(cidade.getCodigo());
			if (fornecedor != null) {

				FacesMessage msg = new FacesMessage(
						ConstantesMensagensSucesso.CIDADE_RELACIONADA_FORNECEDOR);
				msg.setSeverity(FacesMessage.SEVERITY_ERROR);
				context.addMessage(null, msg);

			} else {
				cidade = cidadeDAO.excluir(cidade);
				
				deletou = true;

				FacesMessage msg = new FacesMessage(
						ConstantesMensagensSucesso.CIDADE_EXCLUIDA_SUCESSO);
				msg.setSeverity(FacesMessage.SEVERITY_INFO);
				context.addMessage(null, msg);
			}

		} catch (Exception e) {
			e.printStackTrace();
		}
		return deletou;
	}

	public Cidade pesquisarPorId(Long codigo) {

		this.cidadeDAO = new CidadeDAO();
		Cidade cidade = null;

		try {
			cidade = cidadeDAO.pesquisarPorId(codigo);
		} catch (Exception e) {
			e.printStackTrace();
		}
		return cidade;
	}

	/**
	 * @return the cidadeDAO
	 */
	public ICidadeDAO getCidadeDAO() {
		return cidadeDAO;
	}

	/**
	 * @param cidadeDAO
	 *            the cidadeDAO to set
	 */
	public void setCidadeDAO(ICidadeDAO cidadeDAO) {
		this.cidadeDAO = cidadeDAO;
	}

	/**
	 * @return the fornecedorService
	 */
	public IFornecedorService getFornecedorService() {
		return fornecedorService;
	}

	/**
	 * @param fornecedorService
	 *            the fornecedorService to set
	 */
	public void setFornecedorService(IFornecedorService fornecedorService) {
		this.fornecedorService = fornecedorService;
	}

}